package kjh820909.basic;

public class J15_Interface {

	public static void main(String[] args) {
		//J15SungJukService sjsrv =
		//	new J15SungJukService();
		// 인터페이스는 new 연산자를 통해 객체로 만둘 수 없음
		// 반드시 이것을 상속(구현)한 클래스를
		// 통해 객체로 생성할 수 있음
		J15SungJukServiceImpl sjsrv
			= new J15SungJukServiceImpl();
		// 성적처리에 필요한 기능 (총점,평균,학점)들을
		// 인터페이스로 분리해서 추상메서드로 정의하고
		// 그것을 구현implements해서 클래스로 작성
		// J15SungJukService ( 인터페이스 )
		//  -> J15SungJukServiceImpl ( 구현클래스 )
		
		J15SungJukVO sj =
				new J15SungJukVO("지현", 98, 87, 54 );
		// 값을 저장하는 클래스 선언 및 초기화
		
		sj.setTot(sjsrv.getTotal(sj));
		sj.setAvg(sjsrv.getAverage(sj));
		sj.setGrd(sjsrv.getGrade(sj));
		// 총점,평균,학점 계산후
		// 각 변수에 값 저장
		
		System.out.println(sj.toString());
	}

}

// 인터페이스 정의(~Service)
interface J15SungJukService{
	// 인터페이스가 제공할 메서드 정의
	// 메서드는 서명까지만 작성
	// 이러한 메서드를 추상메서드라 함
	
	
	// int getTotal( int kor, int eng, int mat );
	int getTotal( J15SungJukVO sj );
	double getAverage( J15SungJukVO sj );
	char getGrade( J15SungJukVO sj );
	
}

// 인터페이스를 구현한 클래스 작성(~Impl)
class J15SungJukServiceImpl
		implements J15SungJukService{

	@Override
	public int getTotal(J15SungJukVO sj) {
		int tot = sj.getKor() + sj.getEng() + sj.getMat();
		return tot;
	}

	@Override
	public double getAverage(J15SungJukVO sj) {
		double avg = (double)getTotal(sj)/3;
		return avg;
	}

	@Override
	public char getGrade(J15SungJukVO sj) {
		char grd = ' ';
		switch((int)getAverage(sj)/10){
		case 10: case 9: grd = '수'; break;
		case 8: grd = '우'; break;
		case 7: grd = '미'; break;
		case 6: grd = '양'; break;
		default: grd = '가';}
		return grd;
	}
	
}

class J15SungJukVO{
	private String name;
	private int kor;
	private int eng;
	private int mat;
	
	private int tot;
	private double avg;
	private char grd;
	
	public J15SungJukVO() {
		// TODO Auto-generated constructor stub
	}

	public J15SungJukVO(String name, int kor, int eng, int mat) {
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getKor() {
		return kor;
	}

	public void setKor(int kor) {
		this.kor = kor;
	}

	public int getEng() {
		return eng;
	}

	public void setEng(int eng) {
		this.eng = eng;
	}

	public int getMat() {
		return mat;
	}

	public void setMat(int mat) {
		this.mat = mat;
	}

	public int getTot() {
		return tot;
	}

	public void setTot(int tot) {
		this.tot = tot;
	}

	public double getAvg() {
		return avg;
	}

	public void setAvg(double avg) {
		this.avg = avg;
	}

	public char getGrd() {
		return grd;
	}

	public void setGrd(char grd) {
		this.grd = grd;
	}

	@Override
	public String toString() {
		return "J15SungJukVO [name=" + name + ", kor=" + kor + ", eng=" + eng
				+ ", mat=" + mat + ", tot=" + tot + ", avg=" + avg + ", grd="
				+ grd + "]";
	}
	
	
}
